import 'package:flutter/material.dart';
import 'mText.dart';
import 'mButton.dart';
import 'mImageAndIocn.dart';
import 'mTextFieldAndForm.dart';


///Widget只是UI元素的一个配置数据，并且一个Widget可以对应多个Element
///1.Widget实际上就是Element的配置数据，Widget树实际上是一个配置树，而真正的UI渲染树是由Element构成；
///  不过，由于Element是通过Widget生成的，所以它们之间有对应关系，在大多数场景，我们可以宽泛地认为Widget树就是指UI控件树或UI渲染树。
///2.一个Widget对象可以对应多个Element对象。这很好理解，根据同一份配置（Widget），可以创建多个实例（Element）
///
///
/// StatefulElement 间接继承自Element类，与StatefulWidget相对应（作为其配置数据）。StatefulElement中可能会多次调用createState()来创建状态(State)对象。
/// createState() 用于创建和Stateful widget相关的状态，它在Stateful widget的生命周期中可能会被多次调用。
/// 例如，当一个Stateful widget同时插入到widget树的多个位置时，Flutter framework就会调用该方法为每一个位置生成一个独立的State实例，
/// 其实，本质上就是一个StatefulElement对应一个State实例。
///
///
/// 一个StatefulWidget类会对应一个State类，State表示与其对应的StatefulWidget要维护的状态，State中的保存的状态信息可以：
///1.在widget 构建时可以被同步读取。
///2.在widget生命周期中可以被改变，当State被改变时，可以手动调用其setState()方法通知Flutter framework状态发生改变，
///  Flutter framework在收到消息后，会重新调用其build方法重新构建widget树，从而达到更新UI的目的
void main() => runApp(MyApp());

class MyApp extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return MaterialApp(

      home: HomePage(),
    );
  }
}

class HomePage extends StatelessWidget{

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(

      appBar: AppBar(title: Text('widget'),),

      body: ListView(

        children: <Widget>[

          RaisedButton(

            onPressed: (){

              Navigator.push(context, MaterialPageRoute(builder: (c){

                return TextDemo();
              }));
            },

            child: Text('Text'),
          ),

          RaisedButton(

            onPressed: (){

              Navigator.push(context, MaterialPageRoute(builder: (c){

                return ButtonDemo();
              }));
            },

            child: Text('Button'),
          ),


          RaisedButton(

            onPressed: (){

              Navigator.push(context, MaterialPageRoute(builder: (c){

                return ImageAndIconDemo();
              }));
            },

            child: Text('Image And Icon'),
          ),


          RaisedButton(

            onPressed: (){

              Navigator.push(context, MaterialPageRoute(builder: (c){

                return TextFieldAndFormDemo();
              }));
            },

            child: Text('TextField And Form'),
          ),
        ],
      ),

    );
  }
}